此文是《10周入門資料分析》系列第12篇
想瞭解學習路線,可以先閱讀“ 學習計畫 | 10周入門資料分析 ”。
前段時間,看到某企業對資料分析師的招聘要求有一條:
分析客戶人群的購買習慣,並透過客戶購買行為做出相關資料分析。
好專案,正好爬蟲比較熱門,讓大家練手Python(工作中或多或少能用到)。所以想把python專題提前來講,稍微
改變了一下學習路綫~決定後,恰巧碰上亞馬遜推出中國市場的話題,靈感一現:
哎要不研究亞馬遜上Top100的細分品類 — — 女式內衣!!!的銷售情況吧??
馬上action!雖然這個話題,有點尷尬~
分析分為三步:資料獲取、資料清理、視覺化分析
第一步,採集資料。沒有資料怎麼辦,用萬能的Python爬嘛。
爬取商品排名和詳情頁連結,需要的欄位為:排名、商品名、詳情頁連結。
爬取商品詳情,需要的資訊為:
店家:也就是競爭對手。分析其爆品情況,保留店家連結,後續可針對性挖掘分析;
價格:分析爆品價格區間,對商品定價有幫助;
上架時間:什麼時候上的?爆了多久;
星級、評論數、評論標籤、所有評論連結:爬取評論內容,來分析爆品的優劣勢;
尺寸、顏色:嗯哼?也是非常有價值的參考資料;
圖片連結:難道你不想看看商品長啥樣嗎?
第三步,資料轉化為視覺化圖表,並做分析。
是不是迫不及待想要看過程了,來吧~
Python爬資料很簡單,我個人總結大致就 3點:
會有幾種可能:
1、很簡單的html頁面,就直接requests就可以請求成功;
2、js渲染的頁面 ,這種頁面超多,requests請求一堆js資料;
3、需要登錄才能獲取,至今登錄我都是用的cookie 請求登錄,但應該有更好的辦法;
4、json數據;
會有幾種可能:
1、請求的資料是簡單的html結構頁面 — — 直接BS4解析就好了
2、請求的資料是json — — 導入json模組進行解析
3、請求的資料是簡單的js渲染的html頁面
遇到這種頁面通過抓包或者簡單的在網站上審查請求,然後找的你想要的那部分資料,如果是js渲染的html,其實就是js拼寫的html,只要把其他無用的資料匹配掉用正則找到剩下想要的html文本就好了 。然後BS4解析。
open方法進行檔打開 裡面的參數進行檔案格式設置,讀寫檔、編碼格式操作
with open(“XXX.xxx”,”a”,encoding=”utf-8") as f :
f.write(‘’’寫入的資料’’’)
檔案格式我用過的就是txt、csv 、xml 大部分文本格式都支援的。
a — 是創建檔 每次寫都是重新創建
w — 是追加
a — 是讀數據
encoding=”utf-8"這句話 不加encoding= 在windows系統下會報編碼錯誤,linux不會。
然後就是資料量太大,寫入到資料庫資料庫就用sqlite,記得引入模組 import sqlite3,就是創建資料表。
好了,不囉嗦,開始爬資料。
需要爬取的具體欄位:排名(Rank),商品名(item_name),商品詳情頁連結(item_link)、商品圖片連結(img_src)。
店家名、店家連結、商品名、價格
星級、評論標籤
核心:
構建函數來獲取單個商品的詳細資訊;
利用for迴圈,遍歷商品詳情頁連結清單,來獲取每個商品的詳細資訊
評論內容,星級
核心:
從上一步的csv文件中,讀取Rank , item_name , reviews , reviews_link欄位
構建函數讀取每個商品的所有評論
利用for迴圈,獲取所有商品的所有評論
存儲到資料庫和csv檔中
和第三步基本一樣,代碼基本一樣,主要在於要確認每頁評論的size&color個數。
從csv檔讀取100個商品的資料,篩選出所需要的欄位,進行資料清洗。
這裡注意,部分讀取的資料,看似是數值,實際是字元,因此需要進行類型轉換(如price拆分後,還需要轉為float型)
需要參與數值計算的NaN,使用平均值進行替換。
獲取所需的資料:商家的星級、評論數總和、評論數均值、最低價均值、最高價均值、價格均值、商品數量、占比。針對星級、評論數均值、價格均值、商品數量做標準化處理,並計算加權分。
那麼,亞馬遜的星級評價難道就只受評論數的幾顆星比例影響嗎?我查閱了網上的一些資料,發現亞馬遜評價星級評定的三個重要因素:評論距離現在的時間,評論被買家投票採納數,評論是否有verified purchase標誌(意指真實買家)。此外,評論的字元數,被點擊次數等因素也可能會對評論星級有影響。
看來,亞馬遜對評論的監控和管理是非常嚴格而複雜的!當然,最重要的還是看看評論第一名的Garmol長什麼樣:
比上邊的泳衣更點題了,大家說好才是真的好,very sexy!
最奢華的ELOVER看上去果然比較女神,縮略圖都比別家更用心。
那麼,到底哪個商家的策略更靠譜,市場份額更大呢?
Avidlove的內衣是帥氣酷炫風,還不錯。
單一方面畢竟還是很難衡量哪家商家更優秀,不如綜合多個指標來分析吧~
將星級、平均評論數、商品均價、商品數量進行標準化處理後,因為不好拍定加權的比例,便將4項的歸一化結果x10後直接累加得到總分,並製作成條形堆積圖。
而每個商家的4項指標的占比,則側面反映其自身的優劣勢。
Avidlove,剛剛的酷酷風內衣,在其他三項中規中矩的情況下,以商品數量優勢奪得綜合分第一,有種農村包圍城市的感覺
Garmol,主要依靠口碑(星級、平均評論數)的優勢,奪得了第二名
ELOVER,主要依靠精准切分高端市場,奪得了第三名
N-pearI,沒有任何優勢,不出意料的光榮墊底
口碑最差的N-pearI,能搜到的商品也最少,不過圖很勁爆,emm……然而不是我的菜…
粗略來看的話,想要排名靠前,口碑一定不能太差,至少要保持在平均水準及以上!
用Python做了張散點圖,x軸為商家的商品均價,y軸為商家的星級,點大小為商品數量,商品數量越大,點越大,點顏色為評論均值,評論均值越大,顏色越深紅。
利用價格均值和星級均值,將圖切分為四個象限:
①左上象限:實惠好評的商家
②右上象限:有點貴,但一分錢一分貨的商家
③右下象限:貴,但品質不咋地的商家
④左下象限:便宜沒好貨的商家
所以借助這張散點圖,挑商家買東西就容易多啦:
追求性價比,可選擇Avidlove,而且商品多,任君挑選 ;
追求高端,可選擇ELOVER,它貴有它的道理 ;
追求大眾,可選擇Garmol,評論數最多,而且好評居多 。
顧客可以根據自己的喜好挑選合適的商家,那麼作為商家如何改進自己呢?
前面在爬取的過程中,同樣爬取了評論標籤,通過對此進行詞頻分析,可以發現顧客最關心的依次是:
① 是否合身:size、fit等相關字眼多次出現且排位靠前
② 品質:good quality、well made;soft and comfortable、fabric是對材質的肯定
③ 款式:cute、sexy、like the picture你懂的
④ 價格:cheaply made勉強算價格吧,但更多是對商品品質的懷疑
⑤ 口碑:highly recommend,評論的還是非常有參考價值的
評論標籤的數量較少,進一步對2.4w條評論進行詞頻分析,並製作成詞雲:
快誇我底圖選得好!
最直觀的,仍然是跟“是否合身”以及品質或款式有關。那麼我們就從顧客購買商品的Size&Color繼續分析
這裡,Size&Color的詞頻資料存在幾點問題:
1、數據量較少,僅有約6000條
2、Size&Color無法較好的區分開,因此一起分析
3、商家的命名規則不同,比如同樣是黑色款,有個商家會命名black,而有的可能是style1(所以一些奇怪的數字編號其實是商家的款式編號)
4、有些奇怪的字眼如trim可能是爬蟲時爬錯了或者匯出csv時的格式錯亂
可以明顯看出:
Size方面:large、medium、small肯定均有涵蓋,但另外還有xlarge、xxlarge、xxxlarge,亞馬遜主要是歐美顧客,可能體型相對較大,所以商家應該多研發以及備貨針對體型較大的顧客的商品。
Color方面:非常直觀:Black > red > blue > green > white > purple….所以黑色、紅色永遠不會錯;綠色是出乎我意料的,商家也可以大膽嘗試。
Style方面:詞頻中出現trim、lace字眼,蕾絲最高!!!
在分析了Top100的商品資訊和2.4w條評論後,作為一篇正經的python資料分析研究,我們來總結一下亞馬遜情趣內衣產品和銷售策略:
Garmol、ELOVER、Avidlove分別在口碑、定價、產品數量三個方向有其核心優勢,是需要重點研究的競爭對手。
亞馬遜Best Sellers是每小時更新一次,理論上可以每一小時爬一次,看商品的排名變化,是否有新品等 ,可以嘗試自動化爬蟲;
針對上一點,但商品的評論內容並不是經常更新的,如何去重避免重複爬取?(類似于中斷點續傳功能);
此次也有爬取商品圖片的連結,可全部下載;在積累一定的圖片素材以後,就可以一定程度上看出顏色、甚至是款式的趨勢。
一場臉紅又心跳的資料分析就到這裡,如果你覺得這篇文章就幫我分享出去吧,小編會非常有動力了。
接下來python專題將python入門分爲 — 環境&數據結構、函數基礎、NumPy、Pandas、Matplotlib這5個章節去講述,
有點期待嗎?歡迎在臉書評論給小編:“對哪個章節感興趣?”。
我是「數據分析那些事」。常年分享資料分析乾貨,不定期分享好用的職場技能工具。
別忘記追蹤我的臉書,要常和小編互動喲~